iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 17
0
自我挑戰組

ASP.NET MVC5從入門到退坑系列 第 17

[Day17]ViewModel多表查詢

  • 分享至 

  • xImage
  •  

一般一個View就只能對應一個Model

但是隨著專案需求越來越多,需要做到多表查詢時候,這時就需要使用ViewModel來達成

廢話不多說,直接用程式碼來解說


我們先準備好兩個資料表,一個資料表放公司部門,一個資料表放各部門所屬的員工
https://ithelp.ithome.com.tw/upload/images/20200917/201230289FbMpBayXq.jpg

依照資料表結構產生Model
https://ithelp.ithome.com.tw/upload/images/20200917/201230287wBQ5709CF.jpg

建立一個ViewModel資料夾,存放ViewModel類別(其實也可以放在Models資料夾,純看個人習慣)
https://ithelp.ithome.com.tw/upload/images/20200917/201230289oc70ciZ4q.jpg

在ViewModel類別(DepMemModel.cs)輸入以下程式碼

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using ViewModelPrj.Models;//ViewModel如果是放在Models資料夾就不需要引用這一段

namespace ViewModelPrj.ViewModel
{
    public class DepMemViewModel
    {
        //定義類別擁有資料表的屬性,用來存放List物件
        public List<Department> department { get; set; }
        public List<Member> member { get; set; }
    }
}

建立Controller並建立Action

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using ViewModelPrj.Models;
using ViewModelPrj.ViewModel;//因為把ViewModel類別另外放在ViewModel資料夾所以需要引用

namespace ViewModelPrj.Controllers
{
    public class HomeController : Controller
    {

        ViewModelEntities db = new ViewModelEntities();
        public ActionResult Index(int depId=1) //預設查詢部門編號為1
        {
            ViewBag.DepName = db.Department.Where(m => m.DepId == depId).FirstOrDefault().DepName;
            DepMemViewModel vm = new DepMemViewModel();//產生ViewModel物件
            vm.department = db.Department.ToList();//取得所有部門列表
            vm.member = db.Member.Where(m => m.DepId == depId).ToList();//取得所查詢編號的部門成員
            return View(vm);
        }
    }
}

建立View頁面

@model ViewModelPrj.ViewModel.DepMemViewModel //這裡使用的Model是ViewModel
@{
    ViewBag.Title = "ViewModel";
}
<h2>@ViewBag.DepName</h2>
<div class="row">
    <div class="col-12">
        @foreach (var item in Model.department)
        {
            @Html.ActionLink(item.DepName, "Index", new { depId = item.DepId }, new { @class = "btn btn-info" })
            @:&nbsp; &nbsp;
        }
    </div>
    <br/>
    <div class="col-12">
        <table class="table table-hover">
            <tr>
                <th>員工編號</th>
                <th>姓名</th>
                <th>信箱</th>
            </tr>

            @foreach (var item in Model.member)
            {
                <tr>
                    <td>@item.MemId</td>
                    <td>@item.MemName</td>
                    <td>@item.MemEmail</td>
                </tr>

            }
        </table>
    </div>
</div>

檢視成果
https://ithelp.ithome.com.tw/upload/images/20200917/20123028ruYkn3GBVn.jpg


上一篇
[Day16]Controller的責任
下一篇
[Day18]ViewData|ViewBag|TempData
系列文
ASP.NET MVC5從入門到退坑30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言